Robust image based edge detection

ABSTRACT

The invention relates to a method for detecting an edge of an object in a two dimensional image resulting from rendering a three dimensional object in a three dimensional computer graphic the method detects the edge of the object by means of the Angles of the PS ij  vectors in which P is a point at a first pixel in a screen and S ij  are neighboring points that neighboring to the first pixel.

RELATED APPLICATIONS

This application claims priority to U.S. provisional application Ser. No. 61/613,995 filed on Mar. 22, 2012, the disclosure of which is herein incorporated in its entirety.

TECHNICAL FIELD

The present invention relates to a method for detecting edges of objects in a two dimensional image resulting from rendering a plurality of three dimensional objects in a three dimensional computer graphic context. The present invention further relates to a computer that can execute the method.

BACKGROUND ART

The pamphlet of WO2008/137051 discloses Sobel edge detector to extract edge in computer graphic image. Sobel edge detector is very simple to implement as it is based on a simple matrix convolution. Nonetheless, the final thresholding of the convolved value required for detecting an edge produces visible artifacts.

SUMMARY OF INVENTION Technical Problem

It is one object of the present invention to provide a method for detecting edges in computer graphics that can suppress artifacts and a computer that can execute the method.

Solution to Problem

The first aspect of the invention relates to a method for detecting an edge of an object in a two dimensional image resulting from rendering a three dimensional object in a three dimensional computer graphic. The method obtains a first coordinate (x_(P), y_(P)) and a first depth value (z_(P)) in the three dimensional graphic that correspond to a point (P) at a first pixel in a screen. Next, the method obtains neighboring coordinates (x_(Sij), y_(Sij)) and neighboring depth values (z_(Sij)) in the three dimensional graphic that corresponds to neighboring points (S_(ij)) in the screen. The neighboring points (S_(ij)) are pixels neighboring to the first pixel. The subscript “I” is 0, 1 or 2 and the subscript “j” is 0, 1 or 2. Then, the method calculates Angles of PS_(ij) vectors. After that, the method detects the edge of the object by means of the Angles of the PS_(ij) vectors.

Because the method calculates Angles of PS_(ij) vectors and decides whether P is at the edge or not based on the Angles, the method can detect edges in computer graphics correctly with high speed.

The second aspect of the invention is a computer that can execute the method of the invention.

Advantageous Effects of Invention

The present invention can provide a method for detecting edges in computer graphics that can suppress artifacts and a computer that can implement the method.

BRIEF DESCRIPTION OF DRAWINGS

FIG. 1 is a flow chart of the method for detecting an edge of an object.

FIG. 2 is a block diagram of a computer according to an embodiment of the present invention.

FIG. 3 is a block diagram of the computer.

FIG. 4 is visual representation of used notations.

FIG. 5A shows the result of the proposed edge detection, corresponding to positive ψ_(R).

FIG. 5B shows the result of the proposed edge detection, corresponding to positive ψ_(V).

FIG. 6A shows the influence of the bias for ridges.

FIG. 6B shows the influence of the bias for ridges.

FIG. 7A shows the edges detected using ψ_(R) and ψ_(V).

FIG. 7B shows edges resulting from ψ_(R), where the depth changes are lower than a threshold.

FIG. 8A shows ψ_(R) and ψ_(V).

FIG. 8B shows the corresponding silhouette, where it is defined as ψ_(R)-ψ_(D).

FIG. 9 shows the calculation details.

FIG. 10A is a result that shows degradation of edge detections algorithm applied to a scene composed of boxes.

FIG. 10B is a result that shows degradation of edge detections algorithm applied to a scene composed of boxes.

FIG. 11A is a result that shows degradation of edge detections algorithm applied to tree model.

FIG. 11B is a result that shows degradation of edge detections algorithm applied to tree model.

FIG. 12 is a block diagram of the system with programmable shader

FIG. 13 is an atomic module.

FIG. 14 is a system with an EAM module.

FIG. 15 is a system with an EAM module.

DESCRIPTION OF EMBODIMENTS

The first aspect of the invention relates to a method for detecting an edge of an object in a two dimensional image resulting from rendering a three dimensional object in a computer graphic. The method may detect a plurality of edges on a plurality of objects in a two dimensional image that are included in one scene and are resulting from rendering a plurality of three dimensional objects in a computer graphic. The term, edge, comprises a geometrical concave or convex edge, a contour or a silhouette.

The method usually detects edges or contours of objects in the two dimensional image which result from rendering a plurality of three dimensional objects in a 3D computer graphic context. The edges detected by the method may be edges of objects and silhouettes or contours of objects in two dimensional scenes. For example a sphere in three dimensional scenes may not have any edge (i.e. geometrical edge). However in corresponding two dimensional scenes the corresponding object of the sphere has edge (i.e. silhouette). The method can detect the edge of the object that corresponds to the sphere in three dimensional scenes. Further the object may be a scene because the scene is defined as a set of objects defined in three dimensional computer graphics. The edge may be generated due to overlap of objects and due to insertion of an object to the other object or objects. The first embodiment of the method has following steps.

FIG. 1 is a flow chart of the method for detecting an edge of an object. As shown in FIG. 1, the method has steps of obtaining a first coordinate and a first depth value (Step 101), obtaining neighboring coordinates and neighboring depth values (Step 102), calculating Angles of PS_(ij) vectors (Step 103), and detecting the edge of the object by means of the Angles of the PS_(ij) vectors (Step 104).

In the step of obtaining a first coordinate and a first depth value (Step 101), the method obtains the first coordinate (x_(P), y_(P)) and the first depth value (z_(P)) in the three dimensional graphic that correspond to the point (P) at the first pixel in a screen. The screen is two dimensional screen that comprises the object and may further comprise other objects. The method basically executes calculation for all of the pixels contained in the two dimensional image. The two dimensional image corresponds to the screen. Because the computer renders the objects in the three dimensional objects, it stores the information on the first coordinate (x_(P), y_(P)) and the first depth value (z_(P)) in connection with the point (P). Thus the computer can obtain the first coordinate (x_(P), y_(P)) and the first depth value (z_(P)) by reading the stored information from the memory of the computer.

In the step of obtaining neighboring coordinates and neighboring depth values (Step 102), the method obtains neighboring coordinates (x_(Sij), y_(Sij)) and neighboring depth values (z_(Sij)) in the three dimensional graphic. The neighboring coordinates correspond to neighboring points (S_(ij)) in the screen. The neighboring points (S_(ij)) are pixels neighboring to the first pixel. The subscript i is 0, 1 or 2 and the subscript j is 0, 1 or 2. The S₀₀ corresponds to an upper left pixel of the first pixel. The S₀₁ corresponds to an upper pixel of the first pixel. The S₀₂ corresponds to an upper right pixel of the first pixel. The S₁₀ corresponds to a left pixel of the first pixel. The S₁₂ corresponds to a right pixel of the first pixel. The S₂₀ corresponds to a lower left pixel of the first pixel. The S₂₁ corresponds to a lower pixel of the first pixel. The S₂₂ corresponds to a lower right pixel of the first pixel. The computer can obtain neighboring coordinates (x_(Sij), y_(Sij)) and neighboring depth values (z_(Sij)) in a similar manner to obtain the first coordinate (x_(P), y_(P)) and the first depth value (z_(P)).

In the step of calculating Angles of PS_(ij) vectors (Step 103), the method calculates Angle of PS_(ij) vectors. The angle of PS_(ij) vectors may be the directions of the vectors or angles between x axis and each of PS_(ij) vectors. The computer calculates the angle of the PS_(ij) vector by reading the coordinates of P and S_(ij) and subtracting these coordinates. The method may calculate Angles of the PS_(ij) for all of the pixels in the screen. The method may calculate the one or more angles selected from the group of Angles of S₀₀PS₂₂, S₀₁PS₂₁, S₀₂PS₂₀ and S₁₀PS₁₂.

In the step of detecting the edge of the object by means of the Angles of the P S_(ij) vectors (Step 104), the method detects the edge of the object by means of the Angles of the PS_(ij) vectors. In other words, the method can decide whether the point P belongs to an edge or not. For example, the computer stores the angles of PS_(ij) vectors. First the computer reads the direction or angle of PS₀₀ and PS₂₂ from its memory. Next the computer calculates the angle of S₀₀PS₂₂. If S₀₀PS₂₂ is the same or close to 180 degrees, the P is not at an edge or a contour. If S₀₀PS₂₂ is far different from 180 degrees, then P is estimated to be at an edge or a contour in a vertical direction. Such estimation may be executed by comparing a threshold value with S₀₀PS₂₂ by means of the computer. In other words, the method may further comprise a step of deciding whether any combination of the neighboring points correspond to an edge or not. Thus this method can detect the edge or edges of the object.

The second embodiment of the first aspect of the invention calculates θ₁ and θ₂, for the first neighboring point and the second neighboring point. The first and the second neighboring points may be selected from the neighboring points (S_(ij)). The angles θ₁ and θ₂ are the latitude angles defined by any two of the PS_(ij) vectors. For example, θ₁ and θ₂ are the angles of PS₀₁ and PS₂₁, respectively. Another example of the θ₁ and θ₂ are the angles of PS₁₀ and PS₁₂, respectively. It is preferred that the first neighboring point and the second neighboring point are in an opposite direction of the first point P. The method decides the point P belongs to an edge when Θ_(R) is positive. The Θ_(R) is equal to 1/2(cos θ₁+cos θ₂)−I. The computer may calculate the value of 1/2(cosθ₁+cos θ₂)−1 or obtain the value from a lookup table using the input values of θ₁ and θ₂. Then the computer may decide whether Θ_(R) is positive or not. Θ is a large theta.

The third embodiment of the first aspect of the invention calculates θ₁ and θ₂, for the first neighboring point and the second neighboring point. The method decides the point P belongs to an edge when Θ_(V) is positive. Θ_(V) is equal to −1/2(cos θ₁+cos θ₂)−1. The computer may calculate the value of −1/2(cos θ₁+cos θ₂)−1 or obtain the value from a lookup table using the input values of θ₁ and θ₂. Then the computer may decide whether Θ_(V) is positive or not.

The fourth embodiment of the first aspect of the invention calculates (PS_(ij))_(z)/∥PS_(ij)|. (PS_(ij))_(z) is the difference of depth values between the first depth value (z_(P)) and the neighboring depth value (z_(Sij)). ∥PS_(ij)| is the norm value of the PS_(ij) vectors. The computer obtains the first depth value (z_(P)) and the neighboring depth value (z_(Sij)) from its memory and calculates (PS_(ij))_(z) and ∥PS_(ij)∥. The method decides the point P belongs to an edge when Ψ_(R)(P) is positive. Ψ_(R)(P) is equal to −4+1/2Σ(PS_(ij))_(z)/∥PS_(ij)∥) −41+1/2(Σ(BiasR+(PS_(ij))_(z)/∥PS_(ij)∥). BiasR is a first predetermined number. User may input the BiasR. When the computer obtains a request regarding BiasR, the computer may store the BiasR in its memory. Σ is a mathematical formula that represents to sum. The fourth embodiment may use one of −4+1/2(Σ(PS_(ij))_(z)/∥PS_(ij)∥) and −4+1/2(Σ(BiasR+(PS_(ij))_(z)/∥P S_(ij)∥). The computer can calculate −4+1/2(Σ(PS_(ij))_(z)/∥PS_(ij)∥) or −4+1/2(Σ(BiasR+(PS_(ij))_(z)/∥PS_(ij)∥) after calculating (PS_(ij))_(z)/∥PS_(ij)∥. Then the computer may decide whether the calculated value is positive or not.

The fifth embodiment of the first aspect of the invention calculates (PS_(ij))_(z)/∥PS_(ij)∥ in a similar way to the fourth embodiment. The method decides the point P belongs to an edge when Ψ_(V)(P) is positive. Ψ_(V)(P) is equal to −4+1/2(Σ−(PS_(ij))_(z)/∥PS_(ij)∥ or −4+1/2(Σ(BiasV−(PS_(ij))_(z)/∥PS_(ij)∥). BiasV is a second predetermined number. The computer can calculate −4+1/2(Σ−(PS_(ij))_(z)/∥PS_(ij)∥ or −4+1/2(Σ(BiasV−(PS_(ij))_(z)/∥PS_(i j)∥) after calculating ∥PS_(ij)∥. Then the computer may decide whether the calculated value is positive or not.

The seventh embodiment of the first aspect of the invention calculates (PS_(ij))_(z)/∥PS_(ij)∥ in a similar way to the fourth embodiment. The method decides the point P belongs to an edge when Ψ_(R)(P) is positive and |PS_(ij)∥ is lower or equal to a third predetermined number.

The second aspect of the invention relates to a computer for detecting an edge of an object in a two dimensional image resulting from rendering the plurality of three dimensional objects in a computer graphic.

FIG. 2 is a block diagram of a computer according to an embodiment of the present invention. One example of the computer is a game apparatus. The computer 11 comprises an inputter or an input device 21, a speaker 22, a touch panel 30, a CPU 91, an arithmetic part 93 and a storage part 95. The respective components are connected via a bus 97 for transmission/reception of information. Examples of the inputter 21 are operation buttons, a start switch, a selection switch, and a key board. The computer 11 comprises a display screen 23. The display screen 23 is connected to the bus 97 via a display drive circuit 47. The computer 11 may comprise the touch panel 30 on the display screen 23. The CPU 91 of this computer 11 is connected to an external interface 99 via the bus 97. An example of the external interface 99 is a slot into which a game card or other media may be inserted. The display drive circuit 47 comprises a graphics processing unit (GPU) 47 b and a video RAM (VRAM) 47 a. The GPU 47 b and the VRAM 47 a are connected for transmission/reception of information.

FIG. 3 is a block diagram of the computer. As shown in FIG. 3, the computer has means for obtaining a first coordinate and a first depth value 101, obtaining neighboring coordinates and neighboring depth values 102, calculating Angles of PS_(ij) vectors 103, and detecting the edge of the object by means of the Angles of the PS_(ij) vectors 104. The present invention may be implemented as a hardware resource, such as a circuit. However, the present invention may be implemented as a hardware resource and software which can make a computer to execute the above method. The present invention further provides software which can make a computer to execute the above method or which makes a computer work as the computer of the second aspect of the invention. The present invention further provides a computer readable medium, such as CD-ROM, that stores the software.

The computer fundamentally implements the above described methods. The computer may have other elements that a conventional computer has. The computer of the second aspect has a means for obtaining a first coordinate (x_(P), y_(P)) and a first depth value (z_(P)) in the three dimensional graphic that correspond to a point (P) at a first pixel in a screen. The computer has a means for obtaining neighboring coordinates (x_(Sij), y_(Sij)) and neighboring depth values (z_(Sij)) in the three dimensional graphic that correspond to neighboring points (S_(ij)) in the screen, wherein the neighboring points (S_(ij)) are pixels neighboring to the first pixel. The computer has a means for calculating Angles of PS_(ij) vectors. The computer has a means for detecting edge of the object by means of the Angles of the PS_(ij) vectors.

We explain the detailed concept of the invention with working Examples below.

Framework

Let us consider two planes Π1 and Π2. Instead of trying to detect an eventual edge between Π1 and Π2, let us describe by means of hemisphere the case when there is no edge between them, i.e. Π1 and Π2 are collinear. Π1 and Π2 are defined as follows. Given a point P and two normalized directions PS1 and PS2, Π1 and Π2 are defined. Then, if Π1 and Π2 are coplanar and either an hemisphere is defined in the case the directions PS1 and PS2 are opposite or an entire unit sphere (modulo 2π).

In other word, one may say that if Π1 and Π2 are not coplanar, then an edge exist. This can be express as follows. Recalling the definition of the surface of a sphere is coming from the integration over the latitude angle θ: S=∫ ₀ ^(π)2πr ² sin θd θ

One can express the above remark as follows. Let Θ be a surface element defined as follows: Θ_(R)(θ₁,θ₂)=∫_(θ) ₁ ^(θ) ² ^(+π)2πr ² sin θdθ−∫ ₀ ^(π)2πr ² sin θdθ

Where θ₁ and θ₂ are the latitude angles defined by PS1 and PS2. This integral difference can be analytically expressedas Θ_(R)(θ₁,θ₂)=2πr ²[−cos θ]_(θ) ₁ ^(θ) ² ^(+π)−2πr ²[−cos θ]₀ ^(π) +Cte which becomes after simplification:

$\begin{matrix} {{\Theta_{R}\left( {\theta_{1},\theta_{2}} \right)} = {{\frac{1}{2}\left( {{\cos\;\theta_{1}} + {\cos\;\theta_{2}}} \right)} - 1}} & \left( {{Eq}.\mspace{14mu} 1} \right) \end{matrix}$

Then, looking at the surface element Θ value is sufficient to indicate whether an edge exists. Eq. 1 assumes integration from θ₁ and θ₂, but in sack of completeness, one should also consider the integration from θ₁ to θ₂, resulting in:

$\begin{matrix} {{\Theta_{V}\left( {\theta_{1},\theta_{2}} \right)} = {{{- \frac{1}{2}}\left( {{\cos\;\theta_{1}} + {\cos\;\theta_{2}}} \right)} - 1}} & \left( {{Eq}.\mspace{14mu} 1} \right) \end{matrix}$

In other words, as a summary, one can interpret Eqs. 1 as follows. An edge is defined if the surface element Θ minus the entire unit sphere surface is greater than zero. If Θ_(R) is positive (respectively Θ_(V)) then the defined edge is a ridge (respectively a valley).

The Cte constant value resulting from the integration is ignored at this point, but as it will be shown in a later section, it may be used as a threshold.

Framework Application

Let us consider that a world position buffer is available. Then, for each fragment, we consider the following neighborhood:

S₀₀ S₀₁ S₀₂ S₁₀ P S₁₂ S₂₀ S₂₁ S₂₂

Where P is the current point position and the S are the neighboring positions. Visual representation for a given is given in FIG. 4.

For every S_(ij), the corresponding θ_(ij) angles can be defined as:

$\theta_{ij} = {\tan^{- 1}\left( \frac{P_{z} - S_{{ij}_{z}}}{\sqrt{\left( {P_{x} - S_{{ij}_{x}}} \right)^{2} + \left( {P_{y} - S_{{ij}_{y}}} \right)^{2}}} \right)}$

In order to obtain a robust edge detection, the 8 θ_(ij) has to be calculated and each opposite pair is used in Eq 1, that is Θ(θ₀₀, θ₂₂), Θ(θ₀₁, θ₂₁), Θ(θ₀₂, θ₂₀) and Θ(θ₁₀, θ₁₂), resulting in:

${\psi(P)} = {{\frac{1}{2}{\sum{\cos\;\theta_{ij}}}} - 4}$

Calculation of the arc tangent and cosine terms are redundant and can be simplified. If the PS_(ij) vectors are normalized, then trivially, the cosine of the θ_(ij) angles is defined as:

${\cos\;\theta_{ij}} = \frac{\left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}$

According to the framework explained in the framework section, to detect the presence of an edge, one should consider both directions while integrating the surface element, resulting in the following:

$\quad\left\{ \begin{matrix} {{\psi_{R}(P)} = {{- 4} + {\frac{1}{2}{\sum\frac{\left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}}}} \\ {{\psi_{V}(P)} = {{- 4} + {\frac{1}{2}{\sum\frac{- \left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}}}} \end{matrix} \right.$

FIGS. 5A and 5B show the result of the proposed edge detection, corresponding respectively to positive ψ_(R) and positive ψ_(V). As one can see, all the edges are detected. In fact, too many edges are detected. The samurai armor or the background clearly show edges between the triangles/quadrangles when not planar.

This can be easily overcome while using a simple threshold. The constant value Cte resulting from the integral given in the framework section and omitted in Eq. 1 can be used to define a bias in the edge detection, removing edges below a certain crease angle.

$\quad\left\{ \begin{matrix} {{\psi_{R}(P)} = {{- 4} + {\frac{1}{2}{\sum{BiasR}}} + \frac{\left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}} \\ {{\psi_{V}(P)} = {{- 4} + {\frac{1}{2}{\sum{BiasV}}} + \frac{- \left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}} \end{matrix} \right.$

FIGS. 6A and 6B show the influence of the bias for ridges. As one can see ridges defined as an angle below a certain threshold can be removed.

Distance

In addition to ridges and valleys, a desirable knowledge about edge is when a ridge is detected, to be able to tell if it occurs because of a large difference in depth or an abrupt change in the surface direction as shown in FIG. 7. FIG. 7A shows the edges detected using ψ_(R) and ψ_(V). FIG. 7B shows edges resulting from y_(R), where the depth changes are lower than a threshold.

Detection of such difference in edges is easily described as follows. Given a radius R, we define ψ₁) as:

$\psi_{D} = \left\{ \begin{matrix} \psi_{R} & {{{if}\mspace{14mu} d^{2}} < R} \\ 0 & {otherwise} \end{matrix} \right.$

Using this simple distance based threshold, differences between edges can be made. This is of particular importance in image based effects using edges such as ambient occlusion or contour silhouette detection as in shown in FIGS. 8A and 8B. FIG. 8A shows ψ_(R) and ψ_(V) and FIG. 8B shows the corresponding silhouette, where it is defined as ψ_(R)−ψ_(D).

Implementation

FIG. 9 provides an algorithm reflecting a possible software implementation for the described edge detection method.

The function GetPsyValues, shown in FIG. 9, using the input position P and one of the Sij, corresponds to the following equation.

$\quad\left\{ \begin{matrix} {{\gamma_{R}(P)} = {{BiasR} + \frac{\left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}} \\ {{\gamma_{V}(P)} = {{BiasV} - \frac{\left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}} \\ {\gamma_{D} = \left\{ \begin{matrix} \gamma_{R} & {{{if}\mspace{14mu} d^{2}} < R} \\ 0 & {otherwise} \end{matrix} \right.} \end{matrix} \right.$

The function GetEdge, shown in FIG. 9, using the discrete input coordinate i, j, obtains the corresponding position P and 9 Sij while reading external memory using the function readPosition Buffer, and computes for each pair of Sij using the function GetPsyValues the 4 Psy values, each PsyValuc corresponding to the following equation.

$\quad\left\{ \begin{matrix} {{\psi_{R}(P)} = {{- 1} + {\frac{1}{2}\left( {{\gamma_{R\; 0}(P)} + {\gamma_{R\; 1}(P)}} \right)}}} \\ {{\psi_{V}(P)} = {{- 1} + {\frac{1}{2}\left( {{\gamma_{V\; 0}(P)} + {\gamma_{V\; 1}(P)}} \right)}}} \\ {{\psi_{D}(P)} = {{- 1} + {\frac{1}{2}\left( {{\gamma_{D\; 0}(P)} + {\gamma_{D\; 1}(P)}} \right)}}} \end{matrix} \right.$

The 4 Psy values are then added together, providing the edge definition given in this pamphlet.

Discussion

Degradation of the proposed edge detection filter is discussed hereafter. Instead of considering the complete filter comprising in total four pairs of Sij neighbor values, subsets, two or three pairs of values may be considered. FIGS. 10A, 10B and 11A, 11B show a comparison between different Sij subsets selected as follows.

S₀₀ — S₀₂ — P — S₂₀ — S₂₂

— S₀₁ — S₁₀ P S₁₂ — S₂₁ —

S₀₀ S₀₁ S₀₂ — — — S₂₁ S₂₂

S₀₀ S₀₁ S₀₂ — P — S₂₀ S₂₁ S₂₂

S₀₀ S₀₁ S₀₂ S₁₀ P S₁₂ S₂₀ S₂₁ S₂₂

For the scene composed of boxes, choosing diagonal orientations (S₀₀ S₀₂ S₂₀ S₂₂) gives better results than other subset and is very similar to the results obtained while using the 8 angles. FIGS. 10A and 10B are results that show degradation of edge detections algorithm applied to the scene composed of boxes. Axis aligned subset depicts several artifacts and not clear edges. On the other hand, for the tree example, either axis aligned or diagonal orientations using 2 pairs of Sij gives equivalent result duality-wise. FIGS. 11A and 1113 are results that show degradation of edge detections algorithm applied to tree model.

Although not shown here, in case of animated scenes, such as non-rigid deformations or camera motions, edges smoothly appear and disappear, thanks to the trigonometric framework of the proposed invention.

Block Diagram Outline

In the following section, we propose various block diagrams describing the proposed approach. As an overview, the edge detection algorithm can be summarized as disclosed in FIG. 1.

The Position storage may be stored in memory, and contains for every discrete element of the memory either a single value representing depth or a vector representing a real world coordinates. Typically, the first case where a single depth valve refers to technologies with or without programmable shaders (i.e. standard depth buffer) while the second case exclusively address technologies with programmable shader facility. In the later case, as shown in FIG. 12, a read request is issued from the edge detection module and result (result A in the figure) is directly consumed by the edge detection module. In the case only depth buffer is used, the data obtained by the read request is first consumed by an inverse projection module and then consumed by the edge detection module. Typically, the inverse projection module consists in a 4×4 vector matrix multiplication.

For every point position P, nine reading requests are issued from the edge detection module. In the case inverse projection is required, one may notice that as the edge detection algorithm calculation is localized within a 3×3 pixel windows centered around the pixel under interest, it is sufficient to have a small 3×width line cache to store the transformed coordinates in order to avoid redundant transformation. While providing this line cache facility, inverse projection circuit may be of single occurrence. Otherwise, 9 instances of this module may be required to obtain high performances.

Assuming at this stage that world position is available by some means, the edge detection algorithm can be described as follows. Recalling the following:

S₀₀ S₀₁ S₀₂ S₁₀ P S₁₂ S₂₀ S₂₁ S₂₂

One can say that the atomic calculation takes 3 input, the center P and 2 opposite S_(ij) values (P, S₀₀ and S₂₂ for instance). Let us define this atomic module as disclosed in FIG. 3 referred hereafter as GAM module.

The GAM module corresponds to the following equation:

$\quad\left\{ \begin{matrix} {{\gamma_{R}(P)} = {{BiasR} + \frac{\left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}} \\ {{\gamma_{V}(P)} = {{BiasV} - \frac{\left( {PS}_{ij} \right)_{z}}{{PS}_{ij}}}} \\ {\gamma_{D} = \left\{ \begin{matrix} \gamma_{R} & {{{if}\mspace{14mu} d^{2}} < R} \\ 0 & {otherwise} \end{matrix} \right.} \end{matrix} \right.$

Combining two GAM modules together with the help of two adders and one multiplier defines the EAM module, shown in FIG. 14, and corresponding to the following equations:

$\quad\left\{ \begin{matrix} {{\psi_{R}(P)} = {{- 1} + {\frac{1}{2}\left( {{\gamma_{R\; 0}(P)} + {\gamma_{R\; 1}(P)}} \right)}}} \\ {{\psi_{V}(P)} = {{- 1} + {\frac{1}{2}\left( {{\gamma_{V\; 0}(P)} + {\gamma_{V\; 1}(P)}} \right)}}} \\ {{\psi_{D}(P)} = {{- 1} + {\frac{1}{2}\left( {{\gamma_{D\; 0}(P)} + {\gamma_{D\; 1}(P)}} \right)}}} \end{matrix} \right.$

Referring to the discussion session of this document, an embodiment may focus on higher quality, another on speed, yet another on gate size. Higher quality and best performance may be obtained while providing 4 different instances of the EAM module as depicts FIG. 15.

This module shown in FIG. 15 with performance can be degraded while removing 1 pair of the EAM module, resulting in the embodiment where smaller hardware circuit is preferred. In that case, similar result as high quality can be obtained while providing a multicycle approach (the 2 EAM modules are used 2 times per fragment result in 2 cycles per fragment), or lower (but sufficient) quality can be obtained in a single cycle while using 2 major directions (see the discussion section).

In the same spirit, a single LAM module can be used if the preferred embodiment aims smallest gate size. In such case, at least 2 cycles per input are required for lower quality, 4 for highest quality.

Similar regression is possible for the LAM module, where one or two instances of the GAM module may be used.

[INDUSTRIAL APPLICABILITY]

This invention is used, e.g., in computer graphics industry and amusement industry.

[REFERENCE SIGNS LIST]

-   11 a computer; -   21 an input device; 22 a speaker; -   30 a touch panel; -   47 a display drive circuit; 47 a a video RAM (VRAM); 47 b a graphics     processing unit (GPU); -   91 a CPU; 93 an arithmetic part; 95 a storage part; 97 a bus; 99 an     external interface; -   101 means for obtaining a first coordinate and a first depth value; -   102 means for obtaining neighboring coordinates and neighboring     depth values; -   103 means for calculating Angles of PS vectors; -   104 means for detecting the edge of the object by means of the     Angles of the PS_(ij) vectors

CITATION LIST Patent Literature

-   The pamphlet of WO2008/137051 

The invention claimed is:
 1. A method for detecting an edge of an object in a two dimensional image resulting from rendering a three dimensional object in a three dimensional computer graphic, the method comprising the steps of: obtaining a first coordinate (x_(p), y_(p)) and a first depth value (z_(p)) in the three dimensional graphic that correspond to a point (P) at a first pixel in a screen; obtaining neighboring coordinates (x_(Sij), y_(Sij)) and neighboring depth values (z_(Sij)) in the three dimensional graphic that correspond to neighboring points (S_(ij)) in the screen, wherein the neighboring points (S_(ij)) are pixels neighboring to the first pixel, wherein the subscript i is 0, 1 or 2 and the subscript j is 0, 1 or 2; calculating Angles of P_(ij) vectors; detecting the edge of the object by means of the Angles of the PS_(ij) vectors, wherein the S₀₀ corresponds to an upper left pixel of the first pixel, the S₀₁ corresponds to an upper pixel of the first pixel, the S₀₂ corresponds to an upper right pixel of the first pixel, the S₁₀ corresponds to a left pixel of the first pixel, the S₁₂ corresponds to a right pixel of the first pixel, the S₂₀ corresponds to a lower left pixel of the first pixel, the S₂₁ corresponds to a lower pixel of the first pixel, and the S₂₂ corresponds to a lower right pixel of the first pixel.
 2. A method in accordance with claim 1, wherein the method calculates Angles of the PS_(ij) vectors for all of the pixels in the screen.
 3. A method in accordance with claim 1, wherein the step of calculating Angles of PS_(ij) vectors comprises calculating one or more selected from the group of Angles of S₀₀PS₂₂, S₀₁PS₂₁, S₀₂PS₂₀ and S₁₀PS₁₂.
 4. A method in accordance with claim 1, wherein the step of calculating Angles of PS_(ij) vectors comprises a step of calculating θ₁ and θ₂, for a first and a second neighboring points, wherein the step of detecting the edge of the object decides the point P belongs to an edge when Θ_(R) is positive, Θ_(R) being equal to ½(cosθ₁+cosθ₂+Alpha1)−1, wherein the Alpha 1 is the predetermined number.
 5. A method in accordance with claim 1, wherein the step of calculating Angles of PS_(ij) vectors comprises a step of calculating θ₁ and θ₂, for a first and a second neighboring points, wherein the step of detecting the edge of the object decides the point P belongs to an edge when Θ_(v) is positive, Θ_(v) being equal to − 1/2 (cosθ₁+cosθ₂+Alpha2)−1, wherein the Alpha2 is the predetermined number.
 6. A method in accordance with claim 1, wherein the step of calculating Angles of PS_(ij) vectors comprises a step of calculating (PS_(ij))_(z)/∥PS_(ij)∥, wherein (PS_(ij))_(z) is difference of depth values between the first depth value (z_(p)) and the neighboring depth value (z_(Sij)) and ∥PS_(ij)∥ is the norm value of the PS_(ij) vectors, wherein the step of detecting the edge of the object decides the point P belongs to an edge when Ψ_(R)(P) is positive, Ψ_(R)(P) being equal to −4+½(Σ(PS_(ij))_(z)∥PS_(ij)∥), wherein BiasR is a first predetermined number.
 7. A method in accordance with claim 1, wherein the step of calculating Angles of PS_(ij) vectors comprises a step of calculating (PS_(ij))_(z)/∥PS_(ij)∥, wherein (PS_(ij))_(z) is difference of depth values between the first depth value (z_(p)) and the neighboring depth value (z_(Sij)) and ∥PS_(ij)∥ is the norm value of the PS_(ij) vectors, wherein the step of detecting the edge of the object decides the point P belongs to an edge when Ψ_(V)(P) is positive, Ψ_(V)(P) being equal to −4+½(Σ−(PS_(ij))_(z)/∥PS_(ij)∥, wherein BiasV is a second predetermined number.
 8. A method in accordance with claim 1, wherein the step of calculating Angles of PS_(ij) vectors comprises a step of calculating (PS_(ij))_(z)/∥PS_(ij)∥, wherein (PS_(ij))_(z) is difference of depth values between the first depth value (z_(P)) and the neighboring depth value (z_(Sij)) and ∥PS_(ij)∥ is the norm value of the PS_(ij) vectors, wherein the step of detecting the edge of the object decides the point P belongs to an edge when Ψ_(R)(P) is positive and ∥PS_(ij)∥ is lower or equal to a third predetermined number, Ψ_(R)(P) being equal to −4+½(Σ(PS_(ij))_(z)/∥PS_(ij)∥) wherein BiasR is a first predetermined number.
 9. A computer for detecting an edge of an object in a two dimensional image resulting from rendering the plurality of three dimensional objects in a computer graphic, the computer comprising: means for obtaining a first coordinate (x_(p), y_(p)) and a first depth value (z_(p)) in the three dimensional graphic that correspond to a point (P) at a first pixel in a screen; means for obtaining neighboring coordinates (x_(Sij), y_(Sij)) and neighboring depth value s (z_(Sij)) in the three dimensional graphic that correspond to neighboring points (S_(ij)) in the screen, wherein the neighboring points (S,_(ij)) are pixels neighboring to the first pixel, wherein the subscript i is 0, 1 or 2 and the subscript j is 0, 1 or 2; means for calculating Angle of PS_(ij) vector; means for detecting edge of the object by means of the Angle of the PS_(ij) vector, wherein the S₀₀ corresponds to an upper left pixel of the first pixel, the S₀₁ corresponds to an upper pixel of the first pixel, the S₀₂ corresponds to an upper right pixel of the first pixel, the S₁₀ corresponds to a left pixel of the first pixel, the S₁₂ corresponds to a right pixel of the first pixel, the S₂₀ corresponds to a lower left pixel of the first pixel, the S₂₁ corresponds to a lower pixel of the first pixel, and the S₂₂ corresponds to a lower right pixel of the first pixel. 